/**
 * 假设你正在爬楼梯，需要n阶你才能到达楼顶。
 * 每次你可以爬1或2个台阶，你有多少种不同的方法可以爬到楼顶?
 * 示例1:
 *  输入 n = 2
 *  输出 2
 *  解释: 有两种方法可以爬到楼顶。
 *  1、1 + 1
 *  2、2
 * 示例2:
 *  输入: n = 3
 *  输出: 3
 *  解释: 有三种方法可以爬到楼顶。
 *  1、1 + 1 + 1
 *  2、1 + 2
 *  3、2 + 1
*/
function climbStairs (n) {
    const dp = [];
    dp[0] = 1;
    dp[1] = 1;
    // 根据要执行的问题重读执行子问题、找到边界
    for (let i = 2; i <= n; i++) {
        // 定义子问题
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    return dp[n];
}

console.log(climbStairs(2));
console.log(climbStairs(3));